home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / info / rtnews / rtnv7n3 < prev    next >
Encoding:
Text File  |  1994-10-16  |  65.1 KB  |  1,413 lines

  1.  _ __                 ______                         _ __
  2. ' )  )                  /                           ' )  )
  3.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  4. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  5.          /                               /|
  6.         '                               |/
  7.  
  8.             "Light Makes Right"
  9.  
  10.                July 6, 1994
  11.             Volume 7, Number 3
  12.  
  13. Compiled by Eric Haines, 3D/Eye Inc, 1050 Craft Road, Ithaca, NY 14850
  14.     erich@eye.com
  15. All contents are copyright (c) 1994 by the individual authors
  16. Archive locations:  anonymous FTP at princeton.edu (128.112.128.1)
  17.     /pub/Graphics/RTNews, wuarchive.wustl.edu:/graphics/graphics/RTNews,
  18.     and many others.
  19.  
  20. Contents:
  21.     Introduction
  22.     Ray Tracing Roundtable at SIGGRAPH '94, by Eric Haines
  23.     Books at SIGGRAPH '94, by Eric Haines
  24.     Radiosity: A Programmer's Perspective, by Ian Ashdown
  25.     Computational Geometry in C, by Joseph O'Rourke
  26.     Simple Databases Available For Rendering (Global Illumination), by
  27.         Peter Shirley
  28.     Radiance Version 2.4 Available, by Greg Ward
  29.     Faster Ray-Torus Intersection, by Eric Haines
  30.     RAT PACK:  Free Ray Tracing Research Software, by Tom Wilson
  31.     Light Beams Tricks, by Chris Thornborrow
  32.     On-Line Ray Tracing Bibliography, by Ian Grimstead
  33.     Polynomials, by Han-Wen Nienhuys
  34.     Shadow Caching Observation, by Han-Wen Nienhuys
  35.     Small Comment on GGems III bsp.c, by Han-Wen Nienhuys
  36.     Fogsources, by Han-Wen Nienhuys
  37.     The Rayce Ray Tracer, by Han-Wen Nienhuys
  38.     Ray Tracing Roundup
  39.     A Storage Trick for 3D Polygons, by Eric Haines
  40.     Illumination-Related Abstracts from the Proceedings of Graphics
  41.         Interface '93
  42.     Design and Aims of the YART Graphics Kernel, by Ekkehard 'Ekki' Beier
  43.     Distribution Ray Tracing, by Marc Levoy
  44.     Ray Tracing, Antialiasing, and What To Do Instead, Steven Demlow
  45.     Yet Another Illumination Ph.D., by George Drettakis
  46.  
  47. -------------------------------------------------------------------------------
  48.  
  49. Introduction
  50.  
  51. This issue is one of perhaps three to five I'm planning to get out in July, as
  52. I try to clean out the backlog before SIGGRAPH.  This issue is focussed on
  53. SIGGRAPH and other conferences, theory and algorithms, things like that.  The
  54. next issue will be more hobbyist oriented (it may be out as soon as tomorrow).
  55. I also hope to create a commercial product review issue - nothing formal,
  56. mostly ravings from the nets.  Anyway, this issue brings me partially up to
  57. date to April 20th of the backlog...
  58.  
  59. So, why continue editing and writing for the Ray Tracing News now that the
  60. Usenet group comp.graphics.raytracing exists?  Mostly for the reason anything
  61. gets editing - content and form.  90% of the Usenet group traffic is "where do
  62. I find?" and "how do I make?" type questions, which is just fine for a
  63. newsgroup, but not something you want to save around.  I see the purpose of
  64. the Ray Tracing News as gathering information which is useful to researchers,
  65. graphics artists, and hobbyists:  resources, theory, and general algorithms
  66. (vs. ray tracer specific operations).  Also, there is interesting traffic
  67. which concerns ray tracing and rendering in general (of which I catch but a
  68. small whiff with my automated keywords searchers [see RTNv7n2]) in many other
  69. newsgroups.  By the way, if you want to start a flame-war, strongly assert on
  70. alt.games.doom that Doom uses/does not use ray casting to determine wall
  71. visibility (I never did figure out if anyone had the right answer on that
  72. one).
  73.  
  74. I suspect, given the massive influx of new Usenet users and whatnot, that we'll
  75. see more and more edited (vs. moderated newsgroups) material over time.
  76. Newsgroups are starting to get overwhelming, and I personally can't keep up.
  77. I know that there are many who read the RT News but don't follow
  78. Usenet because of the low signal-to-noise ratio.  It's mostly a labor of
  79. love for me (also, I like to organize this stuff for my own use), but once
  80. the infrastructure and standards exist for person-to-person electronic cash
  81. transfers via email, expect an explosion of edited material for sale for
  82. pennies.  Ahhh, nah, I'm just dreaming - the InfoBahn is really meant for
  83. Gilligan's Island reruns on demand, right?
  84.  
  85. SIGGRAPH stuff:  be sure to check out the "Technical Sketches" sessions, which
  86. are new this year.  These presentations are short, informal talks about work in
  87. progress.  For example, Nicholas Wilt will discuss the advantages (and
  88. pitfalls) he found in working with C++ in creating his object oriented ray
  89. tracer (see the review of his book in RTNv7n2).
  90.  
  91. -------------------------------------------------------------------------------
  92.  
  93. Ray Tracing Roundtable at SIGGRAPH '94, by Eric Haines
  94.  
  95. You're invited!  If you're at SIGGRAPH this year, come to the Ray Tracing
  96. Roundtable.  It's on Thursday at 5:15 pm (actually, we have the room from 5 to
  97. 7, so you can show up early) at the Clarion Hotel (next to the convention
  98. center, acc. to the map) in Salon 14 (a swell room name, combining the
  99. Romantic imagery of a literary salon with a number).  What do we do there?  We
  100. schmooze until the papers reception starts at 7 pm.  Essentially, it's a place
  101. to put names with faces and meet like-minded people.  Sadly, the swimsuit and
  102. pie-eating contests are canceled this year.  Otherwise, it'll be pretty much
  103. the same as the last N years, where N > 5:  we go around the room and
  104. introduce ourselves, then things break up and we talk.  So, to summarize:
  105.  
  106.     Time:  Thursday at 5:15-6:15 pm or so
  107.     Place:    Clarion Hotel, Salon 14
  108.  
  109. Since ray tracing research is essentially dead (except for some of those
  110. parallel and volume rendering guys), I expect a lot of discussion about
  111. whether Wired or Mondo 2000 is the most retina-damaging.  Seriously, now that
  112. ray-tracing has become a mainstream computer graphics artist and hobbyist
  113. oriented activity, I'll be interested to see who shows up and what people are
  114. doing nowadays.  Me, I haven't traced my own rays in perhaps two years (though
  115. am planning to soon) and am more interested in texturing and GUI issues, so
  116. show up if you're interested in 3D rendering and interaction in general.
  117.  
  118. -------------------------------------------------------------------------------
  119.  
  120. Books at SIGGRAPH '94, by Eric Haines
  121.  
  122. This SIGGRAPH promises to have a bunch of great books coming out.  _Graphics
  123. Gems IV_ is already out, of course, and has some wonderful subtly useful bits
  124. of information.  I'm particularly glad to see Ken Shoemake's articles about
  125. Arcball [a great GUI technique of rotating objects or the view] and about
  126. matrix decomposition [sometimes valuable for animation and other things].
  127. These topics were covered by him in Graphics Interface back in 1992, but the
  128. truth is that unless it's in SIGGRAPH it tends to get ignored.
  129.  
  130. Another book which has come out this year is _Programming for Graphics Files
  131. in C and C++_, by John Levine, J.  Wiley, 1994.  It's interesting to compare
  132. with _Graphics File Formats_ by Kay and Levine, McGraw-Hill, 1992.  You'd
  133. think the newer volume would be better in all respects, since the same author
  134. is involved in each.  I used both of these recently for writing a Targa output
  135. routine, and they're fairly different.  The newer volume is code oriented,
  136. with text mostly there as comments for the code, while the older spent time
  137. explaining the file format more thoroughly.  For example, color maps and the
  138. 2.0 Targa format are explained in the earlier book but not in the latter
  139. because no code is given to interpret these.  I am also unimpressed by the
  140. quality of the code given (as proof:  the compute_runlengths() routine on page
  141. 212 spends a lot of time setting runlength[col] = 0 and checking this on pages
  142. 209-210, which is not necessary, since the runlengths accessed by writetga()
  143. will always be non-zero).
  144.  
  145. Francois Sillion and Claude Puech's book on radiosity, _Radiosity and Global
  146. Illumination_, from Morgan-Kaufmann (approx 250 pages, ISBN 1-55860-277-1,
  147. $49.95), will be out in September.  I glanced through the early version at
  148. last year's SIGGRAPH, and it should be of comparable quality to Cohen and
  149. Wallace's _Radiosity and Realistic Image Synthesis_ (Academic Press), released
  150. at last year's SIGGRAPH.
  151.  
  152. Ian Ashdown's book on making radiosity practical, _Radiosity:  A Programmer's
  153. Perspective_, from John Wiley & Sons, should sell well.  It's the first book
  154. of its kind, and should help put to rest those arguments about how radiosity
  155. is too complex or too slow.  See the separate article in this issue for a
  156. quick rundown by the author.
  157.  
  158. Another practical book, this time for GUI programmers and users, is _The
  159. Inventor Mentor_, by Josie Wernecke, from Addison-Wesley.  It's for SGI's
  160. OpenInventor object-oriented system for creating graphics applications.  From
  161. all reports OpenInventor is a nice development system, and even if you're not
  162. using SGI's it's got some good methods for 3D manipulation, etc.  (though I
  163. wish they had used Arcball, which is wonderful).
  164.  
  165. David Ebert is the editor and an author of the forthcoming book _Texturing and
  166. Modeling:  A Procedural Approach_, from Academic Press.  The co-authors are
  167. Ken Musgrave, Darwyn Peachey, Ken Perlin, and Steve Worley.  Another good
  168. title for this book might have been "A Bunch of Guys Playing with Noise"; much
  169. of its focus is on using the noise function in many different ways for making
  170. everything from smoke to mountains.  The focus is mostly on inorganic
  171. substances; there is a little about, say, evolutionary procedural systems such
  172. as L-systems.  Which is fine:  there's a lot of great in-depth material here
  173. for people using procedural functions for texturing.  Particularly useful (at
  174. least for me) were Worley's and Peachey's sections on how to avoid various
  175. problems (e.g. patterning, aliasing), how to make the noise function fast,
  176. and how to expose parameters controlling designed textures to the naive user.
  177. There is plenty of pseudo-code from all of the authors, who pass on their tips
  178. and tricks in a straightforward fashion.  This book will be used as part of
  179. their course at SIGGRAPH.
  180.  
  181. Another book which just came out is _Photorealistic Rendering in Computer
  182. Graphics_, edited by Pere Brunet and Frederik Jansen, Springer Verlag.  This
  183. is the proceedings of the Second Eurographics Workshop on Rendering.  This
  184. conference happened way back in 1991, but I'm happy to see the proceedings
  185. made it to the light of day (partly for personal reasons, I admit:  I'm happy
  186. to see my shaft culling paper not disappearing forever).  There are papers by
  187. Sillion, Ward, Shirley, Kirk and Arvo, and many others.  There are other
  188. lesser known authors who have done some interesting work.  For example,
  189. Christophe Schlick's paper on "An Adaptive Sampling Technique for
  190. Multidimensional Integration by Ray-Tracing" looks like a good way to go for
  191. doing Monte Carlo type rendering adaptively.  Brigitta Lange's article on "The
  192. Simulation of Radiant Light Transfer with Stochastic Ray-Tracing" is an
  193. in-depth treatment of implementing Kajiya's Rendering Equation techniques.
  194. Anyway, browse through it and convince someone else to buy it (Springer-Verlag
  195. books tend to be pricey).
  196.  
  197. If you're looking for a book on CG (computational geometry, that is), consider
  198. _Computational Geometry in C_, by Joseph O'Rourke (see the table of contents
  199. listing in this issue for more information), which came out in January.  For
  200. example, here at 3D/Eye a co-worker found it helpful in designing a robust
  201. polygon tessellator.  His comments are "a good book; full of tricks".
  202.  
  203. Don Hearn and Pauline Baker's _Computer Graphics_ is now in its second edition
  204. (652 pages, Prentice Hall, $61.00, ISBN 013-161530-0).  This edition is a
  205. major rewrite, bringing the book up to date with the latest research.  It's
  206. also the first computer graphics textbook that (gasp!) actually has color
  207. pictures integrated into the text, instead of plates.  I've paged through it
  208. and it looks like a reasonable beginner/intermediate textbook on the subject,
  209. and is definitely user friendly.  Fragments of code in Pascal are used
  210. throughout to explain algorithms, so the book has a hands-on, practical feel
  211. to it.
  212.  
  213. The book that I think is the most important new work at SIGGRAPH '94 won't be
  214. there, and won't be a book; it'll be out come October, it'll be two volumes
  215. (it weighs in at 1400 pages), and I would guess there will be a mock-up or
  216. somesuch on display.  It's Andrew Glassner's _Principles of Digital Image
  217. Synthesis_, from Morgan-Kaufmann.  This book is focussed on the theory of
  218. computer graphics (yes, the field is indeed more than just hacks and tricks).
  219. The science of perception, of sampling and filtering, of how materials
  220. interact with light, and all sorts of other topics are covered.  It's
  221. certainly not light reading, but it does our field a great service.  Glassner
  222. does all the wading into dusty tomes on everything from Monte Carlo theory to
  223. the Kubelka-Munk pigment model to, well, you name it, and pulls out and
  224. explains the parts that are relevant to computer graphics (and also notes the
  225. parts that might be relevant but are currently unexplored).  There are many
  226. figures and graphs throughout.  The book does *not* discuss efficient
  227. rendering algorithms per se; there are no implementation information for
  228. hidden surface renderers, ray tracing, quick filtering, etc.  The reason is
  229. simple:  such algorithms are well covered by many other texts, and what
  230. methods are popular changes over time.  The scientific theory specific to
  231. computer graphics is scattered over a wide number of disciplines, the
  232. foundations of theory do not change (much) over time, and to date there has
  233. been no unified presentation of this material.  Now there is, and I think this
  234. book is a historic step in making computer graphics accepted as an discipline
  235. in its own right.
  236.  
  237. -------------------------------------------------------------------------------
  238.  
  239. Radiosity: A Programmer's Perspective, by Ian Ashdown
  240.     (72060.2420@CompuServe.COM)
  241.  
  242. [This should give you an idea of the sort of book this is. - EAH]
  243.  
  244. Title:            Radiosity: A Programmer's Perspective
  245. Author:            Ian Ashdown
  246. Publisher:        John Wiley & Sons, Inc.
  247. Publication Date:    Summer '94 (in time for SIGGRAPH)
  248.  
  249. Part I        Radiosity Models Light
  250. Chapter 1    Measuring Light
  251. Chapter 2    Radiosity Theory
  252.  
  253. Part II        Tools of the Trade
  254. Chapter 3    Building an Environment
  255. Chapter 4    A Viewing System
  256.  
  257. Part III    Radiosity and Realism
  258. Chapter 5    Form Factor Determination
  259. Chapter 6    Solving the Radiosity Equation
  260. Chapter 7    Meshing Strategies
  261. Chapter 8    Looking to the Future
  262.  
  263. Appendix A    Photometric and Radiometric Definitions
  264. Appendix B    Eigenvector Radiosity
  265. Appendix C    Memory Management Issues
  266. Appendix D    Color Quantization Techniques
  267. Appendix E    AutoCAD DXF File Format
  268.  
  269. The 512-page book will include 7,500+ lines of documented C++ source code for
  270. a fully functional and mostly platform-independent radiosity renderer.
  271. Approximately 1,200 lines of C and C++ are used to provide a user interface
  272. for Microsoft Windows in 16-bit and 32-bit versions (Windows 3.1 and
  273. Win32/Windows NT).
  274.  
  275.   I make it very clear in my book that the industry bible is "Radiosity and
  276. Realistic Image Synthesis".  What I have attempted to provide is an
  277. inexpensive ($40) radiosity testbed for personal desktop computers.  In it I
  278. have implemented a standalone 3-D viewing system with Gouraud shading, color
  279. dithering, gamma correction and so forth (Chapters 3 and 4), a review of form
  280. factor determination methods and three implementations (hemi-cube, cubic
  281. tetrahedron and ray casting), a review of iterative techniques for solving the
  282. radiosity equation (with an implementation of progressive refinement
  283. radiosity, including the ambient lighting term and positive overshooting),
  284. meshing techniques (with an adaptive subdivision implementation), and a review
  285. of other radiosity techniques.  Despite the title, the underlying mathematics
  286. are complete and self-contained.
  287.  
  288. -------------------------------------------------------------------------------
  289.  
  290. Computational Geometry in C, by Joseph O'Rourke (orourke@cs.smith.edu)
  291.  
  292. 346+xi pages, 228 exercises, 200 figures, 219 references
  293.  
  294. Cambridge University Press
  295. ISBN 0-521-44592-2/Pb \$24.95,
  296. ISBN 0-521-44034-3/Hc \$49.95.
  297. Cambridge University Press,
  298. 40 West 20th Street,
  299. New York, NY 10011-4211.
  300. 1-800-872-7423
  301.  
  302. Chapter titles:
  303.     1. Polygon triangulation
  304.     2. Polygon partitioning
  305.     3. Convex hulls in two dimensions
  306.     4. Convex hulls in three dimensions
  307.     5. Voronoi diagrams
  308.     6. Arrangements
  309.     7. Search and intersection
  310.     8. Motion planning
  311.     9. Additional topics
  312.  
  313. -------------------------------------------------------------------------------
  314.  
  315. Simple Databases Available For Rendering (Global Illumination), by
  316.     Peter Shirley <shirley@cs.indiana.edu>
  317.  
  318. Hello fellow global illumination fans.  This is a note about some simple
  319. databases to test rendering that I have put together.  They are in the spirit
  320. of (but not quite as neat as) the ray tracing test scenes put together by Eric
  321. Haines.  They are greyscale and diffuse and mostly quadrilaterals, so expect
  322. something designed for ease of use in arbitrary renderers.  Anyway, if you use
  323. them and experience any problems, please let me know by email.
  324.  
  325. ----
  326.  
  327. Some sample databases for rendering calculations are available by anonymous
  328. ftp.  There are eleven scenes each with a sample image from a particular
  329. viewpoint.  Ten of the scenes have all quadrilaterals, and one also has a
  330. sphere.  The scenes are achromatic.  Nine are all diffuse, one has a specular
  331. surfaces, and one has a glass object.
  332.  
  333. The scenes range in complexity from an empty room with six quadrilaterals, to
  334. a 100 room scene with 41800 quadrilaterals.
  335.  
  336. More scenes may be supplied later.  If you want other types of scenes or need
  337. help converting our geom files to your own format, contact Peter Shirley at
  338. shirley@cs.indiana.edu.
  339.  
  340. The data is available via anonymous ftp at moose.cs.indiana.edu
  341. (129.79.254.191) in pub/RW5.  This directory contains a README file and
  342. several subdirectories (one of which has compressed tar files for the other
  343. directories).
  344.  
  345. ----
  346.  
  347. There has been an addition of two sample density volumes (128^3 and 64^3) to
  348. the databases Georgios Sakas and I have prepared for the 5th Eurographics
  349. Workshop in Rendering to held in Darmstadt, Germany on 13-15 June, 1994 (The
  350. deadline for paper submission is 5 April, 1994).
  351.  
  352. -------------------------------------------------------------------------------
  353.  
  354. Radiance Version 2.4 Available, by Greg Ward (greg@hobbes.lbl.gov)
  355.  
  356. Radiance version 2.4 is now available for downloading by anonymous ftp from
  357. hobbes.lbl.gov (128.3.12.38) in Berkeley, California and soon will be
  358. available from nestor.epfl.ch (128.178.139.3) in Lausanne, Switzerland.  If
  359. you do not have access to ftp, you may request the software on 60 Mbyte 1/4
  360. inch tape cartridge.
  361.  
  362. Relatively little has changed in the 6 months since our last release.  We have
  363. added a couple of new CAD translators, one for Wavefront and one for an
  364. intermediate T-mesh data format.
  365.  
  366. The main reason for creating this release is to take advantage of an
  367. opportunity to put the software on this year's Siggraph CD-ROM.  If you have
  368. release 2.3 already and don't use it much, you may want to wait until the
  369. CD-ROM comes out to install 2.4, and read the new systems paper on Radiance at
  370. the same time.
  371.  
  372. In a related announcement, we now have some Radiance HTML documents on hobbes
  373. for those of you using Mosaic (or its equivalent).  The URL is:
  374.  
  375.     file://hobbes.lbl.gov/www/radiance/radiance.html
  376.  
  377. -------------------------------------------------------------------------------
  378.  
  379. Faster Ray-Torus Intersection, by Eric Haines
  380.  
  381. >Would like to know if anyone can offer tips/algorithm for solving for
  382. >intersection of a ray and a torus.  I have generated a 4th order
  383. >polynomial from torus equation and ray parametric eqns.  Got a solution
  384. >method for a cubic from Numerical Recipes in C and can use it in the
  385. >method for 4th order eqns shown in CRC handbook.
  386. >
  387. >Just wondered if there's an easier and/or faster way.
  388.  
  389. This is exactly what I did.  Just wait until you run into those imprecision
  390. problems...
  391.  
  392. Anyway, using the closed form approach you outline seems the way to go.  My
  393. only addition was to add a very bounding "box" test for the torus.  Using Van
  394. Wijk's method (in an ACM TOG article and in his thesis) for testing a ray
  395. against a surface of revolution, you can derive a simple quadric test which
  396. gives a very close bounding volume, essentially it bounds the torus with a
  397. rectangle around the cross section which is swept around - imagine a squared
  398. off tire being the bounding box.  The advantage here is just that you don't
  399. have to do the whole 4th order shebang - the 2nd order surface can be tested
  400. very efficiently using Van Wijk's method of classification; then if you hit
  401. you need to do the whole test.  This method is lots better for tori with a
  402. large interior radius vs.  bounding boxes, as the method properly says a lot
  403. of the rays passing through the ring are misses and so saves on testing.  I
  404. haven't done a formal analysis, though.
  405.  
  406. -------------------------------------------------------------------------------
  407.  
  408. RAT PACK:  Free Ray Tracing Research Software, by Tom Wilson
  409.     (wilson@forest.dab.ge.com)
  410.  
  411. Very soon I will have the next release of RAT ready for release.  RAT is a RAy
  412. Tracing PACKage which is useful in research environments.  This means that if
  413. you're looking for a pretty picture generator, you're not going to want this
  414. software.  However, if you want to test accelerators or otherwise steal ray
  415. tracing code, you might want the package.  The package has enormous
  416. improvements over the last release, but it's still far from awesome (if you
  417. take 3 and add 10 to it, it is still much less than 100 8-).
  418.  
  419. I've started working on a Mac version, but there are two things preventing me
  420. from finishing it before the release:  (1) my Mac has no FPU and I have no
  421. desire to wait weeks for images to be generated, and (2) making all the
  422. Mac-like features (pull-down menus, etc.)  is going to take some time.
  423. However, the release will come with Think C projects to at least build the
  424. code.  If the user has an FPU then the code can be compiled with that option
  425. turned on.  Many readability/usability improvements have been made.
  426.  
  427. I've had one person add an accelerator to the package in the past and that
  428. should be even easier now.  I intend to add Kirk/Arvo's scheme and Ohta's
  429. scheme in the near future, but I've been saying that for a while.
  430.  
  431. I will NOT be posting the package to c.g or putting it at an ftp site.  You
  432. can request it via e-mail.  When it is ready I will mail it out to my mailing
  433. list.  For more info (like the README from the last release, etc.), send
  434. e-mail.
  435.  
  436. -------------------------------------------------------------------------------
  437.  
  438. Light Beams Tricks, by Chris Thornborrow (ct@epcc.ed.ac.uk)
  439.  
  440. rowley@crl.ucsd.edu writes:
  441. > I'm interested in simulating light-beam effects using POV-Ray.
  442. > This would be something that looked like a search-light, or
  443. > a starburst.
  444.  
  445. In general, this isn't an easy problem to solve if you can see the beam from
  446. any angle and a full solution involves integrating over the light reflected by
  447. particles encountered by the ray through the beam.  Sometimes, just a
  448. constant, scaled by the distance traveled through the beam will work if you
  449. are at right angles to the trajectory of the beam.  As an undergrad I solved
  450. for spheres of light (lamps in fog), cones of light (headlights) and
  451. quadrilateral cross section cones (beams from a window).
  452.  
  453. Depending on the quality you are looking for, simply using a single flat
  454. polygon at 90 degrees to the viewer with appropriately chosen intensities of
  455. colour (less at the spread out end) and transparency will give a passable
  456. effect.
  457.  
  458. -------------------------------------------------------------------------------
  459.  
  460. On-Line Ray Tracing Bibliography, by Ian Grimstead (I.J.Grimstead@cm.cf.ac.uk)
  461.  
  462. This is to announce the availability on the Web of an On-Line Ray Tracing
  463. Bibliography.  It is divided into appropriate sections, and includes many
  464. abstracts from the papers it holds.
  465.  
  466. The references were taken from Tom Wilson's collection of articles, whom I
  467. thank & credit him for his hard work.
  468.  
  469. The site is now stable, but updates will not commence until the pages have
  470. been fully tested.
  471.  
  472. The address of the site is:
  473.  
  474. http://www.cm.cf.ac.uk:/Ray.Tracing/
  475.  
  476. To view & use the bibliography, you require an html viewer such as Mosaic or
  477. Lynx.  If you're not sure what I'm talking about, ask your sys admin about
  478. Mosaic; if they don't know, then get them to acquire the software via archie!
  479.  
  480. This software enables you to view hyper text pages (including pictures,
  481. animation, sounds) distributed around the World Wide Web, and to link into
  482. ftp, gopher and news servers.
  483.  
  484. -------------------------------------------------------------------------------
  485.  
  486. Polynomials, by Han-Wen Nienhuys (hanwen@stack.urc.tue.nl)
  487.  
  488. Algebraic sufaces are nasty shapes.  They're kind of slow, and they suffer
  489. from surface acne:  Rays P + t*D spawned off an algebraic, always have an
  490. intersection at t = 0.  Due to numerical inaccuracies, we often find t which
  491. are small, but bigger than our current tolerance.  This produces phantom
  492. shadows, digital zits and and more unwanted effects.
  493.  
  494. If we could prevent this from happening, then 4th order algebraic shapes don't
  495. need accurate but slow root finders such as Sturm sequences.  So our problem
  496. is how to filter zeros of polynomials p(t) = 0 if t = 0?  First we need to
  497. know what will the consequences be for a polynomial p(t), if it has an
  498. intersection at t = 0.  The anwer is simple, it will look like:
  499.  
  500.  
  501.  p(t) = a_1*t + a_2 * t^2 + ... + a_n*t^n
  502.  
  503. Because p(t) = 0 is a raytracing equation we know that the intersection at t =
  504. 0 is useless anyway, so we might just as well discard it, giving
  505.  
  506.  p_2(t) = a_1 + a_2 * t + ... + a_n*t^n-1
  507.  
  508. as a result.  This will give the same results as p(t) = 0.  This kills two
  509. birds with one stone.  By throwing away the intersection at t = 0, we
  510. eliminate noise, and at the same time reduce the order of the equation.  The
  511. intersection will now also be cheaper!
  512.  
  513. Still, there is a small caveat, due to inaccuracies, the polynomial is more
  514. likely to be
  515.  
  516.   p(t) = a_0 + a_1 * t + ...
  517.  
  518. And p(E) = 0 from a small E, |E| < TOLERANCE << 1.
  519. Setting
  520. |E| < TOLERANCE << 1, we find that
  521.  
  522.   0 = p(E) = a_0 + a_1 * E + O(|E|^2)     (E -> 0)
  523.  
  524. the expression O(|E|^2) means:  smaller than some constant multiplied by
  525. |E|^2, if E tends to 0.  In other words, it can be neglected.  Then
  526. approximately
  527.  
  528.   E = -(a_0 / a_1), and |a_0/a_1|  < TOLERANCE
  529.  
  530. holds. The converse is also true, ie if |a_0/a_1|  < TOLERANCE << 1
  531. then p(E) = 0 for a small E, |E| < TOLERANCE.
  532.  
  533. So we can strip a_0, and lessen the degree of p(t) if
  534.  
  535.   (a_0 / a_1) < TOLERANCE.
  536.  
  537. Caveat:  if the result of evaluating an algebraic P(x,y,z) with (x,y,z) = P +
  538. t*D, has a large error, then this will fail, the resulting polynomial could
  539. have a zero at some t, |t| > TOLERANCE.
  540.  
  541. Experimental results
  542.  
  543. I implemented it in Rayce, and it does work, but not as good as I had wished.
  544. I've tried a zoomed in version of papercl.r (A remake of the
  545. Cook/Carpenter/Porter paperclip; it contains three torii).  This filtering
  546. mechanism eliminated phantom shadows at the edges of the torii.
  547.  
  548. -------------------------------------------------------------------------------
  549.  
  550. Shadow Caching Observation, by Han-Wen Nienhuys (hanwen@stack.urc.tue.nl)
  551.  
  552. Shadow caching is a useful way for quickly determining whether an intersection
  553. will be in a shadow.  This is the idea:  one object that blocks light is
  554. enough to have a shadow at an intersection point.  So each time you find an
  555. object that blocks a ray, store it, and test this object the first thing at
  556. the next shadowray.  Because second level rays are different from first level
  557. rays, the shadow rays spawned off their intersection point are different.
  558. Therefore it seems a good idea to have a cache for each recursion level and
  559. each lightsource.
  560.  
  561. On the other hand, a quick survey of the raytracers on my harddisk revealed
  562. that PoV and Rayshade cache only one object per lightsource.  MTV and Art have
  563. a cache for each level.  Nobody seems do make a distinction between reflected
  564. and refracted rays.  Let me explain:  if a recursion-level 1 intersection
  565. could be from an eyeray that is refracted, or an eyeray which has been
  566. reflected.  Since the reflected and refracted rays will have entirely
  567. different directions, their respective intersection points, and hence the
  568. blocking objects for a given lightsource, will usually be different.
  569.  
  570. The solution:  instead of passing the recursion depth to the recursive
  571. function trace(), pass a tree, which looks like:
  572.  
  573.   struct Tree {
  574.     struct Tree *reflect_tree, reflact_tree;
  575.     int recursion;
  576.     object **shadow_cache
  577.   }
  578.  
  579. shadow_cache is an array with a pointer to the last blocking object for each
  580. lightsource.
  581.  
  582.   shade (Tree *t, ...)
  583.   {
  584.     if (reflection) {
  585.       [set up reflection ray]
  586.       color = trace (t->reflected, ...);
  587.    }
  588. }
  589.  
  590.  
  591. I've implemented this in Rayce, and for scenes with both refraction and
  592. reflection, it doubles the number of cache hits.
  593.  
  594. [Interesting to me - I implemented essentially the same thing for our
  595. commercial ray tracer, assuming it would be a win for minimal extra memory,
  596. but never tested it out to see whether the improvement was noticeable. - EAH]
  597.  
  598. -------------------------------------------------------------------------------
  599.  
  600. Small Comment on GGems III bsp.c, by Han-Wen Nienhuys (hanwen@stack.urc.tue.nl)
  601.  
  602. I've adapted Graphics Gems III's BSP code for use in Rayce, and I have a small
  603. remark.  Although most of the code was inefficient because it had to be
  604. educational and understandable, the authors forgot a simple optimization.  It
  605. will make the code even simpler.  Change:
  606.  
  607.     if ( RayObjIntersect(ray, currentNode->members, obj, distance) ) {
  608.     PointAtDistance(ray, distance, &p);
  609.     if (PointInNode(currentNode, p))
  610.         return TRUE;
  611.     }
  612.  
  613. to
  614.  
  615.     if ( RayObjIntersect(ray, currentNode->members,obj, distance)) {
  616.  
  617.     /* intersection in currentnode ? */
  618.     if (distance > min && distance <  max) {
  619.       return TRUE;
  620.     }
  621.     }
  622.  
  623. This saves 10 floating point operations, and 2 function calls.
  624.  
  625. Kirk and Arvo limited the recursion depth of the tree by setting a hard coded
  626. limit at 49.  It makes more sense to determine the depth of the bintree from
  627. the object database.  I've tweaked the subdivide() procedure to stop
  628. subdividing a node, if subdivision has no effect.  This has two pros:
  629.  
  630. 1. The depth doesn't have an arbitrary limit.
  631.  
  632. 2. If all objects of a node overlap, then the subdivision won't help,
  633. if you'd continue subdivision, the tracing will take extra time.
  634.  
  635. -------------------------------------------------------------------------------
  636.  
  637. Fogsources, by Han-Wen Nienhuys (hanwen@stack.urc.tue.nl)
  638.  
  639. Yesterday, I was riding my bicycle at night, and I was thinking of how to
  640. raytrace my surroundings.  It was a bit foggy, and the light of the
  641. streetlights was scattered in a beautiful glowing haze.  While riding, I came
  642. up with a method to model these foggy lights.  This method should also be good
  643. for modelling the "neon", that some folks on PCGNet want to do with PoV.
  644.  
  645. So let I = I(d) be the intensity at a certain point, which has distance d from
  646. the lightsource.  What's happening in the fog?  The mist of water drops
  647. scatters the light.  If a drop is further away from a lightsource, then it
  648. will receive less light from the lightsource.  Therefore I(d) should be a
  649. decreasing function.  The total amount of light that a ray will encounter on
  650. its way from its origin P to its intersection point P + D*e, is
  651.  
  652.    e
  653.    /
  654.    | I( distance(lightsource, P + t*D) ) dt
  655.    /
  656.    0
  657.  
  658.  
  659. This isn't really correct, we're neglecting the fact that the light which is
  660. reflected from a drop in our direction will also be attenuated when traveling
  661. from the drop to our eyes.
  662.  
  663. For actual implementation, we need to know distance explicitly.  Let's first
  664. derive that one.  Let (,) denote a dotproduct
  665.  
  666.  
  667.                L
  668.                ^
  669.                d_0
  670.                v
  671.  P --------X-------------------------------------> P + e * D
  672.  
  673.        ^--  P + t * D
  674.  
  675. P   = origin of ray
  676. D   = direction of ray
  677. X   = a point on the ray described by P + t*D
  678. L   = lightsource
  679. d_0 = the closest the ray can get to L.
  680. e   = endpoint of the ray, the first intersection
  681.  
  682. We have:
  683.  
  684.  distance ^ 2  =  (P - L + t*D, P - L + t*D)
  685.  
  686. On the other hand, the distance would be easy to calculate, if we knew d_0,
  687. shortest distance between the ray and the light.  By setting the derivative of
  688. the formula above to 0, we find:
  689.  
  690.   t_0 =  - (P-L, D)/(D, D).
  691.  
  692. >From this you can calculate d_0, and the distance is found, by simply using
  693. Pythagoras:
  694.  
  695.   distance^2 = d(t) ^2 =  d_0 ^ 2 + ( (t - t_0)*|D| ) ^2
  696.  
  697. For simplicity, let's assume |D| = 1, then the above formula reduces to
  698.  
  699.   d(t) ^ 2 = d_0 ^ + (t - t_0)^2.
  700.  
  701. All we have to do now is choosing an intensity function I(d).  I propose this
  702. one:  I(d) = 1/d^2, because it will give a simple formula.  A physically more
  703. correct one would be I(d) = exp(-cd)/d^2, for a given constant c.  The exp()
  704. is there, because intensity decreases exponentially with distance due to
  705. absorption.  The ^2 is there because light falls of at 1/r^2 in a 3
  706. dimensional perfectly transmitting medium.  However, calculation would involve
  707. a not-so-nice integral, which I didn't want to integrate (and probably can't
  708. be found explicitly).
  709.  
  710. However, if we set I = 1/d^2, then we get:
  711.  
  712.        e
  713.       /         d t
  714. light =   |  ------------------  =
  715.       /  (t - t0)^2 + d_0^2
  716.       0
  717.  
  718. This is an easy integral:  substitute k := t - t0, substitute x := k/d_0, and
  719. you the anwer you finally get is:
  720.  
  721.   ( atan((e-t0)/d_0) - atan((-t0)/d_0 ) )/ d_0.
  722.  
  723. I will probably implement this in my raytracer, but I am not sure when.
  724. [he did, see below. -EAH]
  725.  
  726. -------------------------------------------------------------------------------
  727.  
  728. The Rayce Ray Tracer, by Han-Wen Nienhuys (hanwen@stack.urc.tue.nl)
  729.  
  730. [The above articles all went into Han-Wen's ray tracer, below. Also, note
  731. that Rayfmt sounds generally useful, i.e. could be used with POV-ray, I think.
  732. -EAH]
  733.  
  734. Rayce 2.8, the newest version of my raytracer is available now.
  735.  
  736.  
  737. [RAYCE]
  738.  
  739.    Rayce is a raytracer I've written to find out how raytracing works.  It's
  740. written for purely educational purposes.  If you want to make neat pictures,
  741. use PoV or Vivid instead.  Oh, by the way, "educational" means "for my
  742. education", but you could use it in a C.G.  class too.  It wouldn't make a
  743. very good example, though, I am afraid.  Most of the design and implementation
  744. is my own, our university library's copy of "An intro to Ray Tracing" hasn't
  745. been available for some time, so I was on my own, while programming Rayce.
  746.  
  747.    Still, Rayce has been expanded very much, and I plan to incorporate a lot
  748. of weird and new stuff into it.
  749.  
  750.    What features does Rayce have?
  751.  
  752.    - Rayce supports these primitives:  sphere, quadric, plane, lightsource,
  753.      box, torus, algebraic, superquadric, polygon, triangle, disc
  754.    - It has these non-primitives: composite, translational extrusion, CSG
  755.    - Rayce has distribution raytracing for rendering penumbra, motion blur,
  756.      gloss and translucency.
  757.    - Rayce has multiple efficiency schemes (well :-): manual bounding
  758.      hierarchies or recursive bintree traversal.
  759.    - The sources are GPL-ed, and they're portably written ANSI C.
  760.    - Debugging facilities
  761.    - A POV like input language
  762.    - Imagemaps
  763.    What important features are still missing?
  764.    - Solid texturing
  765.    - Bumpmaps
  766.    - Serious anti aliasing.
  767.    - Support for these primitives
  768.     * Heightfield
  769.     * Bezierpatches
  770.     * Cones
  771.     * Blob
  772.  
  773. Newities in version 2.8
  774.     * bg.c: fogsource
  775.     * csg.c: limited CSG intersection autobounding (gives a nice speed
  776.     increase compared to PoV on some scenes, luchter.r :)
  777.     * added rayfmt (raytrace scene formatter) to distribution
  778.     * shade.c: directional (distant) light
  779.     * poly.c: polynomial real_clean filter, reduces phantom shadows
  780.     * bsp.c: bsp. Wowie! Rayce is FAST!
  781.     * object.c: no_shadow, no_reflect, no_refract, no_eye analog of
  782.     PoV's no_shadow.
  783.     * grids.c: grid trees, with jitter. better pictures with
  784.     distribution raytracing
  785.     * shade.c: lightsources can have speed
  786.     * shade.c: Microfacet models, Reitz (Trowbridge & Reitz), Blinn,
  787.     Phong,  Cook (Beckmann), Gauss
  788.  
  789.  
  790. [RAYFMT]
  791.  
  792.    Rayfmt is a simple Raytrace datafile formatter. It only uses the
  793. `{}', `[]' and `<>' for indenting the code, it's not a codewalker.
  794.  
  795.    Rayfmt indents code in my favorite indentation.  I mainly use it
  796. to keep my datafiles clean, and to make other people's scenes
  797. readable.  It's also great for beautifying computer generated scene
  798. files.
  799.  
  800. [AVAILABILITY]
  801.  
  802. Rayce 2.8 & Rayfmt 1.14 consists of:
  803.  
  804.      rayce28m.zip: .texi manual sources
  805.      rayce28x.zip: Turbo C++ executable [Can someone make a 32 bit
  806.      DOS version of Rayce?]
  807.      rayce28d.zip: documentation and some scenes
  808.      rayce28l.zip: linux executable
  809.      rayce28s.zip: C sources to Rayce
  810.      rayfmt114.zip: Rayfmt 1.14, raytrace scene formatter
  811.  
  812. Rayce & Rayfmt are available at:
  813.  
  814. BBS
  815.      Bennekom BBS: fido node 2:283/203, PCGNet 9:580/203, tel.
  816.      31-8389-15331. (freqqing times: 07.30 to 01.00, local time in
  817.      Holland)  Bennekom BBS supports V32bis and V42bis.
  818.  
  819. ftp
  820.      wuarchive.wustl.edu:/graphics/graphics/ray/rayce/
  821.      [it might still be in /pub/MSDOS_UPLOADS/graphics/]
  822.  
  823. -------------------------------------------------------------------------------
  824.  
  825. Ray Tracing Roundup
  826.  
  827. In case you've been missing it, there is a FAQ for comp.graphics.raytracing.
  828. Either wait for it to get reposted, FTP from ftp.uwa.edu.au:  pub/povray/FAQ
  829. (and probably elsewhere), or contact Andy Wardley (abw@dsbc.icl.co.uk), the
  830. FAQ's author, for more info.
  831.  
  832. ----
  833.  
  834. There is a new FTP list for 3D graphics related sources, models, images,
  835. papers, etc. in Nick Fotis' FAQ, which is at rtfm.mit.edu [18.70.0.209] in
  836. the directory pub/usenet/news.answers.  You can also get this listing by using
  837. a mail server:  send a e-mail message to mail-server@rtfm.mit.edu containing
  838. the keyword "help" (without quotes) in the message body.  The new list is much
  839. changed from my old one; useless sites deleted, new ones added, and a fair bit
  840. of clean up and whatnot.
  841.     Eric Haines
  842.  
  843. ----
  844.  
  845. The Graphics Gems IV code is available on princeton.edu in
  846. /pub/Graphics/GraphicsGems/GemsIV/GGemsIV.tar.Z or ggemsiv.zip.  Some minor
  847. errata and corrections have been made to this code (i.e. it's improved from
  848. what's distributed with the book).
  849.  
  850. ----
  851.  
  852. I've put together a heightfield/terrain rendering mailing list
  853. (heightfield-request@monet.seas.gwu.edu); the idea for its creation came from
  854. the successful Terrain Rendering SIG at SIGGRAPH '93.
  855.     Matt Pharr <pharr@CS.YALE.EDU>
  856.  
  857. ----
  858.  
  859. A new version of the [Computational Geometry] biblio is ready for pickup via
  860. anonymous ftp from cs.usask.ca, in file pub/geometry/geombib.tar.Z as usual.
  861.     Bill Jones <jones@skdad.usask.ca>
  862.  
  863. ----
  864.  
  865. DEM as heightfield
  866.  
  867. I've put some code together which will take files in the DEM format that the
  868. PC landscape renderer VistaPro uses and convert them to rayshade-style
  869. heightfield files.  I believe, however, that the VistaPro DEM format is
  870. different from the USGS DEM format.  In any case, I can make what I have
  871. available to anyone who is interested...
  872.     Matthew Pharr (pharr-matthew@CS.YALE.EDU)
  873.  
  874. ----
  875.  
  876. Ian Ashdown taking over the Radiosity bibliography from me, send him new
  877. references from now on.  Contact:  Ian Ashdown <72060.2420@CompuServe.COM>
  878.     Eric Haines
  879.  
  880. ----
  881.  
  882. The previous issue of the RT News (RTNv7n2) has been translated to PostScript:
  883.  
  884.     anonymous FTP from princeton.edu:/pub/Graphics/RTNews/RTNv7n2.ps.Z
  885.  
  886. All credit goes to Ben Black, who volunteered to do this conversion.  Fonts
  887. are used pleasantly throughout (they certainly beat the usual constant width
  888. text).  If you find this conversion to be worthwhile, let me know and we'll
  889. look at getting out further issues in plaintext and PostScript (Ben also
  890. mentioned that RTF is also easy for him to churn out, so mention if that is of
  891. interest).  With a little work figures and images could be added to future
  892. PostScript versions.
  893.     Eric Haines
  894.  
  895. ----
  896.  
  897. Errata on Errata:
  898.  
  899. RTNv7n1 had errata for "Adventures in Ray Tracing", by Alfonso Hermida.
  900. Alfonso's listed email address was wrong, it should be:
  901.  
  902.     AFANH@STDVAX.GSFC.NASA.GOV
  903.  
  904. -------------------------------------------------------------------------------
  905.  
  906. A Storage Trick for 3D Polygons, by Eric Haines
  907.  
  908. I beat the point-in-polygon problem to near-death in Graphics Gems IV.  One
  909. trick I realized laters is that you can save a noticeable amount of storage if
  910. you use the method of dropping the 3D coordinate which corresponds to the
  911. largest magnitude coordinate of the plane's normal (for example, say the
  912. normal is [-2 -6 3], then the Y coord is the absolute largest, so drop the Y
  913. coordinates and use X and Z).  This means you truly can just store 2
  914. coordinates per vertex, since the third (which you shouldn't need for a ray
  915. tracer anyway, but might for some other reason) is implicit given the plane
  916. equation.
  917.  
  918. In other words, you find the "major axis", throw away its coordinate, and
  919. store only the other two, since that's all you need for the point in poly test
  920. anyway (you also note for the polygon which coordinate was thrown away).  If
  921. for some reason you do need the third coordinate value, you can always
  922. rederive it by plugging the other two coordinates into the polygon's plane
  923. equation and solving for it.
  924.  
  925. Some of you may be going "Eric's getting senile" at this point, since it
  926. sounds obvious, but I never thought of it before.  Blame it all on the CAD
  927. people I hang out with - you never throw away data and rederive it in this way
  928. in CAD, since you need that data to actually make something and don't want
  929. imprecision creeping in.  But if you're rendering, it's fine to throw away
  930. what you don't need while rendering an image.  The other nice thing throwing
  931. away data gives you is that you can use a single 2D fully optimized subroutine
  932. for point-in-polygon testing, vs. having three routines (one for when X is
  933. thrown away, one for Y, one for Z); nice from a maintainability and a
  934. compactness standpoint.
  935.  
  936. -------------------------------------------------------------------------------
  937.  
  938. Illumination-Related Abstracts from the Proceedings of Graphics Interface '93
  939.     (May 19-21, 1993, Toronto, Ont. CA)
  940.  
  941. [I'm afraid I lost the name of the kind soul who typed all these in.  Tom
  942. Wilson, perhaps?  I'm not sure...  Yes, these are for the '93 GI, if anyone
  943. has '94's available electronically, let me know and I'll publish them - EAH]
  944.  
  945. "An Adaptive Discretization Method for Progressive Radiosity"
  946.  
  947. Lalonde (lalonde@cs.ubc.ca)
  948.  
  949. The solutions of the radiosity method are highly dependent on the
  950. discretization used.  All methods used to generate these discretizations have
  951. to date depended on the scene being formed of polygonal surfaces.  However,
  952. these are often not the most efficient representations of the objects.  The
  953. meshing process usually only takes geometry into account, making shadow edges
  954. awkward to deal with.  In addition, there are a number of restrictions that
  955. the radiosity method requires of the model that most available modellers do
  956. not enforce.
  957.  
  958. The method presented here allows non-polygonal objects to be used as input to
  959. a progressive radiosity method.  The environment is sampled by ray casting,
  960. removing the need for a polygonal representation to be provided.  The method
  961. allows the generation of a discretization that is sensitive to lighting
  962. changes, not only to geometric constraints.  One effect of this is that higher
  963. order discontinuities in surface lighting are detected and the discretization
  964. can be focused in these areas without user intervention.
  965.  
  966. ++++
  967.  
  968. "Geometric Simplification for Indirect Illumination Calculations"
  969.  
  970. Rushmeier,Patterson & Veerasamy (holly@cam.nist.gov)
  971.  
  972. We present a new method for accelerating global illumination calculations in
  973. the generation of physically accurate images of geometrically complex
  974. environments.  In the new method, the environment geometry is simplified by
  975. eliminating small isolated surfaces, and replacing clusters of small surfaces
  976. with simple, optically equivalent,boxes.  A radiosity solution is then
  977. performed on the simplified geometry.  The radiosity solution is then used in
  978. a multi-pass method to estimate the radiances responsible for indirect
  979. illumination.  We present a preliminary implementation of the new method, and
  980. some initial images and timing results.  The initial results indicate that
  981. using simplified geometries for indirect illumination calculations produces
  982. images in times significantly less that previous multi-pass methods without a
  983. reduction in image quality.
  984.  
  985. ++++
  986.  
  987. "Computing Illumination from Area Light Sources by Approximate Contour
  988. Integration"
  989.  
  990. Vedel (vedel@dmi.ens.fr)
  991.  
  992. A new method using approximate contour integration to accurately compute
  993. direct illumination from diffuse area sources in presence of curved obstacles
  994. is presented.  All visibility tests are done using ray tracing so the method
  995. can be applied to a large class of objects.
  996.  
  997. Computation of illumination on a pixel by pixel basis is necessary to
  998. accurately capture sharp shadows.  However in soft penumbra zones many shadow
  999. rays are needed to quantize the penumbra finely enough and avoid banding
  1000. artifacts.  Furthermore these zones usually cover lots of pixels.  We make use
  1001. of the fact that silhouettes of objects in a scene are smooth for the most
  1002. part to replace them by polygonal lines in source space.  The method allows
  1003. the estimation of intensity gradients.  Penumbras with no aliasing are
  1004. obtained with fewer rays than with usual adaptive sampling techniques.
  1005.  
  1006. ++++
  1007.  
  1008. "Spatially Nonuniform Scaling Functions for High Contrast Images"
  1009.  
  1010. Chiu, Herf, Shirley, Swamy, Wang & Zimmerman (shirley@cs.indiana.edu)
  1011.  
  1012. An algorithm is presented that scales the pixel intensities of a computer
  1013. generated grey scale image so that they are displayable on a standard CRT.
  1014. This scaling is spatially nonuniform over the image in that different pixels
  1015. with the same intensity in the original image may have different intensities
  1016. in the resulting image.  The goal of this scaling transformation is to produce
  1017. an image on the CRT that perceptually mimics the calculated image, while
  1018. staying within the physical limitations of the CRT.
  1019.  
  1020. ++++
  1021.  
  1022. "Common Illumination between Real and Computer Generated Scenes"
  1023.  
  1024. Fournier, Gunawan, Romanzin (fournier@cs.ubc.ca)
  1025.  
  1026. The ability to merge a real video image (RVI) with a computer-generated image
  1027. (CGI) enhances the usefulness of both.  To go beyond "cut and paste" and
  1028. chroma-keying, and merge the two images successfully, one must solve the
  1029. problems of common viewing parameters, common visibility and common
  1030. illumination.  The result can be dubbed Computer Augmented Reality (CAR).
  1031.  
  1032. We present in this paper techniques for approximating the common global
  1033. illumination for RVI's and CGI's, assuming some elements of the scene geometry
  1034. of the real world and common viewing parameters are known.  Since the real
  1035. image is a projection of the exact solution for the global illumination in the
  1036. real world (done by nature), we approximate the global illumination of the
  1037. merged image by making the RVI part of the solution to the common global
  1038. illumination computation.  The objects in the real scene are replaced by few
  1039. boxes covering them; the image intensity of the RVI is used as the initial
  1040. surface radiosity of the visible part of the boxes; the surface reflectance of
  1041. the boxes is approximated by subtracting an estimate of the illuminant
  1042. intensity based on the concept of ambient light; finally global illumination
  1043. using classic radiosity computation is used to render the surface of the CGIs
  1044. with respect to their new environment and for calculating the amount of image
  1045. intensity correction needed for surfaces of the real image.
  1046.  
  1047. An example animation testing these techniques has been produced.  Most of the
  1048. geometric problems have been solved in a relatively ad hoc manner.  The
  1049. viewing parameters were extracted by interactive matching of the synthetic
  1050. scene ith the RVI's.  The visibility is determined byh the relative position of
  1051. the "blocks" representing the real objects and the computer generated objects,
  1052. and a moving computer generated light has been inserted.  The results of the
  1053. merging are encouraging, and would be effective for many applications.
  1054.  
  1055. -------------------------------------------------------------------------------
  1056.  
  1057. Design and Aims of the YART Graphics Kernel, by Ekkehard 'Ekki' Beier
  1058.     (Ekkehard.Beier@Prakinf.TU-Ilmenau.DE)
  1059.  
  1060. In this article the principal design of the graphics kernel YART shall be
  1061. described.  YART is being developed at the Technical University of Ilmenau
  1062. (Germany) and is part of the GOOD project.  Further components of this project
  1063. are an interactive front end and a class library for distributed applications.
  1064. All this is free, available with all source.  Everybody is invited to use,
  1065. modify, and extend YART.  Any comments, contributions, and bug fixes would be
  1066. greatly appreciated.
  1067.  
  1068. In contrast to most others systems (like ray-tracers) or libraries (like SGI's
  1069. GL or PHIGS PLUS) YART integrates different kinds of rendering at the same
  1070. time.  These are (currently):
  1071.  
  1072. * Shading\Wireframe - used for realtime animations/simulations
  1073.  
  1074. * Raytracing - the slowest rendering mechanism, but generating images with the
  1075. best quality.
  1076.  
  1077. * Radiosity - a nice kind of rendering, but only useful for static scenes; if
  1078. a scene is computed (scene decomposition, diffuse light distribution) it can
  1079. be seen from different viewpoints as fast as standard Shading.  Shading and
  1080. Raytracing are always available, Radiosity has to be installed at
  1081. configuration time (i.e. done by setting a compilation flag).
  1082.  
  1083. This coexistence has advantages, because Shading can be used as a built-in
  1084. previewer.  For example, a complete animation or simulation can be checked
  1085. using the Shading mode for the camera.  After finding the optimal parameters
  1086. for time dependencies, camera control, etc.  the camera may be switched into
  1087. raytracing mode to generate a lot of image files on disc.
  1088.  
  1089. On the other hand, the ray-tracer interface of the primitives is used for
  1090. implementing a pick operation in order to allow direct interactions while in
  1091. the shading mode for the camera.
  1092.  
  1093. YART is an open system with one essential aim:  extensibility.  YART is built
  1094. around some essential abstract terms similarly to PREMO, an upcoming ISO
  1095. standard:
  1096.  
  1097. A CAMERA takes PRIMITIVEs from a SCENE and puts them to a PIXMAP.  The kind of
  1098. projection, rendering, etc. and special features like supersampling and
  1099. stereoviewing are hidden in the specific camera class.  Any new camera can be
  1100. implemented using transparent subclassing.  Examples of concrete cameras are
  1101. OneRayCamera (for ray-tracing test purposes) and LookatCamera (perspective
  1102. view, allowing shading, raytracing, radiosity in one and the same pixmap).  A
  1103. StereoCamera has been implemented as a demo for the SGI GL port of YART.  An
  1104. orthographic camera will be implemented in next release.  If you don't like
  1105. the YART implementation of transparency or refraction computation, just
  1106. subclass your own camera class and overload the related methods.
  1107.  
  1108. A PRIMITIVE is a graphical output object that may own different rendering
  1109. protocols.  Thus, every primitive has more than one representation.  YART
  1110. defines a set of base primitives:  Polymarker, Polyline, Polygon, Polyhedron,
  1111. Quadmesh, (TriangleStrip, Spline, NURBS).  These objects are in principle
  1112. directly supported by (hardware-based) shading pipelines.  These universal
  1113. primitives are dynamically editable, and they can be empty or partially
  1114. instantiated.  All other primitives (so-called higher-levels:  text,
  1115. analytical, OFF) are built on top of these.  Thus, these are automatically
  1116. portable.  New high-level primitives can be created by parameterization of the
  1117. universal primitives, e.g. analytically defined objects like a sphere may
  1118. parameterize a quadmesh to get their Shading presentation.  However, the
  1119. inherited ray-tracing interface of the quadmesh is overwritten using the
  1120. analytical description of the sphere.  The Shading representation of a special
  1121. ray-tracing primitive can be much simpler than the ray-tracing representation.
  1122. In the extreme this could be a bounding box only, usable for interactions.
  1123.  
  1124. YART supports hierarchical objects:  all attributes and the modelling matrices
  1125. will automatically inherited down to the children of an object.  Furthermore,
  1126. all rendering interfaces automatically manage children of objects.  However,
  1127. they can be overwritten, if the complex object can be analytically defined to
  1128. get a faster ray-tracing.  The hierarchical objects automatically compute
  1129. recursive hierarchical bounding boxes in world coordinates to optimize the
  1130. ray-tracing and pick operation.  Extensions can be made in subclasses to
  1131. integrate time dependency, physical parameters or whatever you want.
  1132.  
  1133. Here is an example of an user-defined class (in C++):
  1134.  
  1135. class RT_RobotArm: public RT_Primitive {
  1136.     int left;
  1137.     // 1 means left arm - 0 means right arm
  1138.   public:
  1139.     RT_RobotArm(char *_name, int _l): RT_Primitive( _name), left( _l ) {
  1140.     RT_Primitive *p;
  1141.     (p = new RT_Sphere(0, 0.5))->father( this );
  1142.     (p =  new RT_Sphere(0, 0.45))->father( this );
  1143.     p->translate( RT_Vector( left ? -0.3 : 0.3, -0.4, 0.3 ));
  1144.     (p =  new RT_Sphere(0, 0.4))->father( this );
  1145.     p->translate( RT_Vector( left ? -0.4 : 0.4, -0.75, 0.7 ));
  1146.     }
  1147. };
  1148.  
  1149. usage:
  1150.  
  1151. class RT_Robot:public RT_Primitive {
  1152.     RT_Primitive *solid, *head, *arml, *armr, *shl, *shr;
  1153.   public:
  1154.     RT_Robot(char *_name): RT_Primitive( _name) {
  1155.     ...
  1156.     (arml = new RT_RobotArm(0, 1))->father( this );
  1157.     arml->translate( RT_Vector(-1.1, 1, 0));
  1158.  
  1159.     (armr = new RT_RobotArm(0, 0))->father( this );
  1160.     armr->translate( RT_Vector(1.1, 1, 0));
  1161.     ...
  1162.     }
  1163. };
  1164.  
  1165. This is the only stuff to implement (+ one or two methods for the interpreter
  1166. interface), all other things are inherited.  To avoid compile-link cycles for
  1167. each new class an interpretative class system basing on the additional
  1168. interpretative language binding (Tcl) is provided.
  1169.  
  1170. The new user-defined primitives are indistinguishable from the prefabricated
  1171. ones.  With the implementation of YART extensions the number of classes of
  1172. primitives will rise, but the amount of platform-dependent code will drop
  1173. relatively.  In YART0.40 5 per cent of source code was platform dependent.
  1174.  
  1175. A further advantage of inheritance we found in the last few months.  The heavy
  1176. changes (kernel tuning, attribute mechanisms, ...)  did not or only minimally
  1177. influenced the derived classes.
  1178.  
  1179. A well-defined number of virtual methods of the Primitive class is provided to
  1180. be used in user-defined extensions.  For instance, a method to recreate the
  1181. geometry (and display list) as a result of attribute changes or a method that
  1182. will be called from the framework around when the modelling matrix has
  1183. changed.  In the scientific package this is used to recalculate the electric
  1184. field, if a source or sink has been moved (using the interactive front-end).
  1185.  
  1186. Further essential terms in short:  ATTRIBUTEs are properties of PRIMITIVES,
  1187. for instance Fillstyle and Resolution.  Application-specific attributes can be
  1188. added very easily.  Attributes (even user-defined) can be assigned to or
  1189. inquired from every object.
  1190.  
  1191. SCENEs are unordered lists of PRIMITIVES and are used as input for cameras.
  1192. An example for a subclassed special scene is the Radiosity scene.
  1193.  
  1194. PIXMAPs are abstract units for displaying rasterized images, for example,
  1195. online display, MPEG-based storage pixmaps, and can be coupled with IMAGES.
  1196.  
  1197. IMAGEs represent abstractly image files, the access to an image is independent
  1198. from the specific format such as Targa or (SGI) RGB.
  1199.  
  1200. INPUT DEVICES are objects, too.  They're event-controlled, callback-oriented,
  1201. extensible, platform independent and can directly be coupled with output
  1202. objects.  As output objects, (basic) input objects can be nested into complex
  1203. input objects.  Input devices can be driven stand-alone or coupled to a camera
  1204. (in this case, they can have scene independent, camera specific visual
  1205. feedback).
  1206.  
  1207. Furthermore there are LIGHTS, TEXTURES, MAPPINGS, (animation) RECORDERS, etc.
  1208. as interactive objects, too.
  1209.  
  1210. A few more points:
  1211.  
  1212. - Besides the C++ API a consistent interpretative API (Tcl) is provided for
  1213. testing, prototyping and programming.  Tcl is a simple-to-use language without
  1214. types, and has C-like control structures (for, if then else, while, ...)  with
  1215. an OSF/Motif-like widget set (Tk).
  1216.  
  1217. - Persistence is provided for all objects and realized by dumping Tcl code.
  1218.  
  1219. - Built-in documentation describes the behavior of all objects.  This is
  1220. important for the reusability of YART extensions.
  1221.  
  1222. - YART is platform-dependent.  Currently supported are SGI GL, PHIGS PLUS
  1223. ISO-C and pure X11.  OpenGl and RS/6000 GL are in the works, PEX in
  1224. perspective.
  1225.  
  1226. - Integration of 2D user interfaces (Tk)
  1227.  
  1228.  
  1229. YART has still a lot of areas to be implemented, for example:
  1230. - polygon/quadmesh ray-tracer interface
  1231. - splines and NURBS
  1232. - CSG and sweep modeling
  1233. - a faster (PEX based) shader to have realtime interactions on LINUX (the
  1234.     current one is very slooooooooow)
  1235.  
  1236. But our manpower is limited.  Thus, everybody is heartily welcomed to join
  1237. this project.
  1238.  
  1239. Contact (and mailing list): yart@prakinf.tu-ilmenau.de
  1240.  
  1241. -------------------------------------------------------------------------------
  1242.  
  1243. Distribution Ray Tracing, by Marc Levoy (levoy@blueridge.Stanford.EDU)
  1244.  
  1245. [my Usenet news filter client is based in Stanford (see RTNv7n2 for details -
  1246. it's a nice resource), and so picks up local Stanford newsgroups for classes,
  1247. etc.  This popped up one day, and Marc gave me permission to reprint it.  I
  1248. thought it was interesting to see a slice of one class' assignment; these are
  1249. hints to them on how to implement a ray tracer.  It should really be edited to
  1250. be fully understandable, but I leave it to you to read between the lines. -EAH]
  1251.  
  1252. ///// su.class.cs348b.47 /////
  1253.  
  1254. Dear class,
  1255.  
  1256. A few clarifications and hints regarding distribution ray tracing:
  1257.  
  1258. 1.  Many people have asked Chase or myself about comparing ray / path trees in
  1259. when distributing reflected or refracted rays.  To my knowledge, there's no
  1260. literature on this question.  After thinking about it for a while, we
  1261. concluded that there is no good way to do this.  If you distribute your rays
  1262. over a variety of reflection / refraction directions, the ray or path trees
  1263. associated with adjacent image plane samples will almost certainly differ,
  1264. triggering possibly unnecessary subdivisions.  We therefore suggest disabling
  1265. comparison of ray / path trees when you have enabled distribution ray tracing
  1266. (or disable comparison of ray / path trees for those image plane sample
  1267. regions containing any rays that strike any objects for which you have defined
  1268. a distribution (depending on how you implement this part of the assignment)).
  1269.  
  1270. 2.  Some people are confused about the relationship between distribution
  1271. versus classical (i.e. nondistribution) ray tracing, and ray tree versus path
  1272. tracing.  The first and second pairs of techniques constitute orthogonal
  1273. considerations when designing a ray tracer.  All four algorithms in this 2 x 2
  1274. matrix are plausible.  For example, one can imagine a nondistribution ray
  1275. tracer that does ray tree (as opposed to path) tracing, in which case the
  1276. branching factor at each surface is zero, one, or two (one specular reflection
  1277. ray and one specular refraction ray), not including rays cast directly to
  1278. light sources to render the diffuse component.  One can also imagine a
  1279. distribution ray tracer that does path tracing; at each surface, you choose
  1280. one direction from the distribution you are sampling and continue the path in
  1281. that direction.  I require you in this assignment to support both distribution
  1282. and nondistribution ray tracing, but you need not support both ray tree and
  1283. path tracing - just pick one of the latter two.
  1284.  
  1285. 3.  I have presented adaptive algorithms in which a subdivision decision is
  1286. performed only at the image plane.  For distribution ray tracing using ray
  1287. trees (as opposed to paths), a spray of rays is traced from each intersected
  1288. surface.  Your sampling of this distribution can be regular or stochastic, and
  1289. can be nonadaptive or adaptive.  This makes a 2 x 2 matrix of algorithms, as
  1290. described in class a long time ago.  You can pick any one of these, and the
  1291. decision need not be related to what you do on the image plane.  For example,
  1292. if you choose an adaptive algorithm, you would performing adaptive sampling of
  1293. the near-specular (i.e. glossy) reflection direction distribution at the
  1294. intersected surface.  This adaptive sampling would be in addition to and
  1295. totally independent of any adaptive sampling you perform at the image plane.
  1296. I don't require that you do any fancy sampling at intersected surfaces as I
  1297. required for your sampling of the image plane in assignment #2.  I just want
  1298. you to be aware that theory supports doing such fancy things if you are so
  1299. inclined.
  1300.  
  1301. 4.  Remember that there is another choice you must make when distributing rays
  1302. at intersected surfaces; you must choose between distributing rays uniformly
  1303. (in the statistical sense - the actual distribution can be regular or
  1304. stochastic) and weighting them unequally according to a gloss (or
  1305. translucence) function, or distributing rays nonuniformly according to the
  1306. gloss function.  As stated in class, the latter is a form of importance
  1307. sampling.  I don't require any particular solution here; just be prepared to
  1308. explain what you've done.
  1309.  
  1310. Hope this helps.
  1311.  
  1312. -Your prof
  1313.  
  1314. -------------------------------------------------------------------------------
  1315.  
  1316. Ray Tracing, Antialiasing, and What To Do Instead, Steven Demlow
  1317.     (demlow@cis.ohio-state.edu)
  1318.  
  1319. Arijan Siska, a computer graphics fan wrote:
  1320. >I want to get some attention to the (in my opinion) a very serious issue:
  1321. >antialiasing.
  1322. >I would like to hear you opinion, especially results of your own research in
  1323. >this area.
  1324.  
  1325. I played around with a variety of AA approaches in both my own ray tracer and
  1326. the public domain [not PD, actually - EAH] POV ray tracer.  I tried various
  1327. derivations and combinations of supersampling, stochastic jittering, adaptive
  1328. methods, and filtering.  For the animation project I was working on I ended up
  1329. using 4x4 stochastically jittered grids on each pixel and a tent filter that
  1330. extended into the (cached, of course) grids of neighboring pixels.  I've been
  1331. working on using a hexagonal grid instead of a rectangular one (this gets
  1332. tricky when you try to overlap the arbitrarily-sized filtering grids of
  1333. adjacent pixels).  The hex grid supposedly provides close to an optimal ray
  1334. distribution for AA purposes.
  1335.  
  1336. It sounds like you would do well to add filtering to your ray tracer - it can
  1337. help a lot.
  1338.  
  1339. The conclusion I came to, after eight months of rendering on a bunch of
  1340. HP7?0s, was that ray tracing is not the way to go to generate a lot of high-
  1341. quality images. :)  I love ray tracing but there are reasons that it sees
  1342. little use in production environments.
  1343.  
  1344. -------------------------------------------------------------------------------
  1345.  
  1346. Yet Another Illumination Ph.D. [his title, not mine - EAH], by
  1347.     George Drettakis (dret@dgp.toronto.edu)
  1348.  
  1349. Hi everybody,
  1350.  
  1351. I just finished the final version of my PhD thesis.  It is available by anon
  1352. ftp at dgp.toronto.edu:pub/dret/PhD.  There are postscript files (for single
  1353. and double-sided printers) and tiff files for all the colour images.  It will
  1354. soon also be available as CSRI Technical Report 293 (ftp only at
  1355. ftp.csri.toronto.edu:csri-technical-reports/293).  I welcome all comments or
  1356. suggestions at either dret@dgp.toronto.edu or George.Drettakis@imag.fr
  1357.  
  1358. It can be quoted either as "Ph.D. thesis, Dept. of Computer Science,
  1359. University of Toronto", or as : "CSRI Technical Report no. 293,
  1360. University of Toronto".
  1361.  
  1362. Thanks,
  1363. George Drettakis                          Dynamic Graphics Project
  1364.                           Computer Systems Research Institute
  1365. Phone +1 (416) 978 5473                   University of Toronto
  1366. FAX   +1 (416) 978-0458                   Toronto, Ontario CANADA M5S 1A4
  1367. e-mail: dret@dgp.toronto.edu  or dret@dgp.utoronto.ca
  1368.  
  1369. ---------------------
  1370.  
  1371. Here is the info:
  1372.  
  1373. Title:
  1374. Structured Sampling and Reconstruction of Illumination for Image Synthesis
  1375.  
  1376. Degree:  Ph.D., University of Toronto, Department of Computer Science
  1377.  
  1378. Author:  George Drettakis
  1379.  
  1380. Abstract:
  1381.  
  1382. An important goal of image synthesis is to achieve accurate, efficient and
  1383. consistent sampling and reconstruction of illumination varying over surfaces
  1384. in an environment.  A new approach is introduced for the treatment of diffuse
  1385. polyhedral environments lit by area light sources, based on the identification
  1386. of important properties of illumination structure.  The properties of
  1387. unimodality and curvature of illumination in unoccluded environments are used
  1388. to develop a high quality sampling algorithm which includes error bounds.  An
  1389. efficient algorithm is presented to partition the scene polygons into a mesh
  1390. of cells, in which the visible part of the source has the same topology.  A
  1391. fast incremental algorithm is presented to calculate the backprojection, which
  1392. is an abstract representation of this topology.  The behaviour of illumination
  1393. in the penumbral regions is carefully studied, and is shown to be monotonic
  1394. and well behaved within most of the mesh cells.  An algorithm to reduce the
  1395. mesh size, and an algorithm which selects between linear and quadratic
  1396. interpolants are presented.  The results show that the mesh size and the
  1397. degrees of the interpolants can be reduced without significant degradation of
  1398. image quality.  The preceding algorithms are combined into a complete
  1399. structured sampling approach that allows accurate and efficient representation
  1400. of illumination using interpolating polynomials for scenes with occlusion.
  1401. Images with accurate shadows can be produced from the structured
  1402. representation using either ray-casting or polygon rendering hardware.
  1403. Finally, it is shown that our methodology generalises easily to the global
  1404. illumination problem.  An iterative solution to a Galerkin finite element
  1405. approach is proposed, and it is shown how the structured algorithms provide a
  1406. good initial approximation for the iteration, enhance efficiency for numerical
  1407. integration and allow adaptive mesh modification.  The structure-driven global
  1408. illumination algorithm thus promises significant improvement over previous
  1409. higher-order finite element solutions.
  1410.  
  1411. -------------------------------------------------------------------------------
  1412. END OF RTNEWS
  1413.